/**
 * jQuery插件：表单效果
 * 
 * @author  Allen
 * @url     http://www.songyouhui.com/
 * @name    jquery.tablegrid.js
 * @since   2011-5-18 17:30:50
 */
(function($) {
    $.fn.tablegrid = function(options){
        $.fn.tablegrid.defaults = {
            oddColor   : '#f7f8f9',
            evenColor  : '#EEF2FB',
            overColor  : '#E1E5EE',
            selColor   : '#E1E5EE',
            useClick   : true,
            useDblClick:false,
            useOverOut:true,
            resize:false,
            col_border : "none"
        };
        var opts = $.extend({}, $.fn.tablegrid.defaults, options);
        //拖动列宽
        var resize_columns = function(root) {                   
            var tbl = root.children("table");    //找到table
            var tr  = tbl.find("tr:first");   //找到第一行
            var header,newwidth;
            var resize = false;
            root.width(tbl.width()); //table的宽度
            tr.children("th").css("border-right",opts.col_border);  //给第一行的th加上一个css
            var left_pos = root.offset().left;
            endresize = function() {
                if(resize == true && header != null) {
                    document.onselectstart=new Function ("return true");
                    resize = false;
                    root.children("table").css("cursor","");
                }   
            };
            tbl.mousemove(function(e) {
                var left = (e.clientX - left_pos);
                if(resize) {
                    var width = left - (header.offset().left - left_pos)
                    - parseInt(header.css("padding-left"))
                    - parseInt(header.css("padding-right"));
                    if(width > 1) {
                        var current_width = header.width();
                        if(width > current_width) {
                            var total = root.width() + ((width - header.width()));
                            root.width(total);
                            header.width(width);
                        } else {
                            header.width(width);
                            if(header.width() == width)
                            {
                                var total = root.width() + ((width - current_width));
                                root.width(total);
                            }
                        }
                        newwidth = width;
                    }
                } else {
                    if(e.target.nodeName == "TH") {
                        var tgt = $(e.target);
                        var dosize = (left-(tgt.offset().left-left_pos) 
                            > tgt.width()-4);
                        $(this).css("cursor",dosize?"col-resize":"");
                    }
                }                   
            });
            tbl.mouseup(function(e) {
                endresize();
            });
            tbl.bind("mouseleave",function(e) {
                endresize();
                return false; 
            });
            tr.mousedown(function(e) {
                if(e.target.nodeName == "TH" 
                    && $(this).css("cursor") ==  "col-resize") {
                    header = $(e.target);                    
                    resize = true;
                    document.onselectstart=new Function ("return false");
                }    
                return false;
            });
            tr.bind('mouseleave',function(e) {
                if(!resize)
                    root.children("table").css("cursor","");
            });
        };
        return this.each(function() {
            var root = $(this).wrap("<div class='roottbl' />").parent();
            //拖动列宽事件
            if(opts.resize){
                resize_columns(root);
            }
            //奇偶行上色
            $(this).find('tr:odd > td').css('backgroundColor', opts.oddColor);
            $(this).find('tr:even > td').css('backgroundColor', opts.evenColor);        
            $(this).find('tr').each(function(){
                //--------------------------------------this为tr------------------------------------------
                this.origColor = $(this).find('td').css('backgroundColor');    //未点击时的颜色
                this.clicked = false;   //初始状态,设置bool变量clicked,以click事件触发此变量的true or false
                if (opts.useClick) {
                    $(this).click(function(){  //此处的this是tr
                        if (this.clicked) {
                            $(this).find('td').css('backgroundColor', this.origColor);
                            this.clicked = false;
                        } else {
                            $(this).find('td').css('backgroundColor', opts.selColor);
                            this.clicked = true;
                        }
                    //$(this).find('td > input[@type=checkbox]').attr('checked', this.clicked);
                    });
                }
                //鼠标滑过及滑出事件
                if (opts.useOverOut) {
                    $(this).mouseover(function(){
                        $(this).find('td').css('backgroundColor', opts.overColor);
                    });
                    $(this).mouseout(function(){
                        if (this.clicked) {
                            $(this).find('td').css('backgroundColor', opts.selColor);
                        } else {
                            $(this).find('td').css('backgroundColor', this.origColor);
                        }
                    });
                }
                //双击事件
                if (opts.useDblClick) {
                    var urls=$(this).children("td:first-child").find("a").attr("href");
                    $(this).dblclick(function(){
                        window.open (urls,'详细情况','height=540,width=1020,top=10,left=10,toolbar=no,menubar=no,scrollbars=yes, resizable=yes,location=no, status=no')
                    });
                }
            //--------------------------------------this为tr------------------------------------------
            });
        });
    };
})(jQuery);